package com.ctc;

import java.util.ArrayList;
import java.util.List;

class DataManager
{
    /**
     * 要发送的数据包，验证是否收到
     */
    private final List<DataPacket> sendPacket = new ArrayList<>();

    /**
     * 要发送的ACK数据
     */
    private final List<DataPacket> ackPacket = new ArrayList<>();


    /**
     * 添加要发送的数据
     *
     * @param dataPacket 要发送的数据
     */
    public void addData(DataPacket dataPacket)
    {
        synchronized (sendPacket)
        {
            sendPacket.add(dataPacket);
        }
    }

    /**
     * 获取要发送的数据
     *
     * @return 要发送的数据
     */
    public DataPacket getData()
    {
        DataPacket result = null;
        synchronized (sendPacket)
        {
            if (!sendPacket.isEmpty())
            {
                result = sendPacket.remove(0);
            }
        }
        return result;
    }

    /**
     * 检查是否有数据待发送
     *
     * @return 是否有数据待发送
     */
    public boolean hasData()
    {
        synchronized (sendPacket)
        {
            return !sendPacket.isEmpty();
        }
    }

    /**
     * 添加ACK
     *
     * @param dataPacket 要发送的ACK数据
     */
    public void addACKData(DataPacket dataPacket)
    {
        synchronized (ackPacket)
        {
            ackPacket.add(dataPacket);
        }
    }

    /**
     * 获取ACK
     *
     * @return 要发送的ACK数据
     */
    public DataPacket getAckData()
    {
        DataPacket result = null;
        synchronized (ackPacket)
        {
            if (!ackPacket.isEmpty())
            {
                result = ackPacket.remove(0);
            }
        }
        return result;
    }

    /**
     * 检查是否有ACK待发送
     *
     * @return 是否有ACK待发送
     */
    public boolean hasAckData()
    {
        synchronized (ackPacket)
        {
            return !ackPacket.isEmpty();
        }
    }

    /**
     * 检查是否没有数据
     *
     * @return 是否没有数据
     */
    public boolean isEmpty()
    {
        return !hasAckData() && !hasData();
    }
}